Skip to main content

Csv 写入和导出

go的标准库

    "encoding/csv"

写入

f, err := os.Create(export.GetExcelFullPath() + "test.csv")
if err != nil {
panic(err)
}
defer f.Close()

f.WriteString("\xEF\xBB\xBF")

w := csv.NewWriter(f)
data := [][]string{
{"1", "test1", "test1-1"},
{"2", "test2", "test2-1"},
{"3", "test3", "test3-1"},
}

w.WriteAll(data)

在 Go 提供的标准库 encoding/csv 中,天然的支持 csv 文件的读取和处理,在本段代码中,做了如下工作:

1、os.Create:

创建了一个 test.csv 文件

2、f.WriteString("\xEF\xBB\xBF”)

\xEF\xBB\xBFUTF-8 BOM 的 16 进制格式,在这里的用处是标识文件的编码格式,通常会出现在文件的开头,因此第一步就要将其写入。如果不标识 UTF-8 的编码格式的话,写入的汉字会显示为乱码

3、csv.NewWriter:

func NewWriter(w io.Writer) *Writer {
return &Writer{
Comma: ',',
w: bufio.NewWriter(w),
}
}

4、w.WriteAll:

func (w *Writer) WriteAll(records [][]string) error {
for _, record := range records {
err := w.Write(record)
if err != nil {
return err
}
}
return w.w.Flush()
}

WriteAll 实际是对 Write 的封装,需要注意在最后调用了 w.w.Flush(),这充分了说明了 WriteAll 的使用场景,你可以想想作者的设计用意

导出